
/**
 * @file        httpmgr.h
 * @author      OuYang
 * @date        2025/05/07
*/

#ifndef HTTPMGR_H
#define HTTPMGR_H

#include <QString>
#include <QUrl>
#include <QObject>
#include <QNetworkAccessManager>
#include <QJsonObject>
#include <QJsonDocument>
#include <QNetworkReply>

#include "singleton.h"

class HttpMgr:public QObject, public Singleton<HttpMgr>,
                public std::enable_shared_from_this<HttpMgr>
{
    Q_OBJECT
public:
    ~HttpMgr();
    /**
     * @brief PostHttpReq 发送Post请求
     * @param url         请求url
     * @param json        请求数据
     * @param req_id      请求id
     * @param mod         请求模式
     */
    void PostHttpReq(QUrl url, QJsonObject json, ReqId req_id, Modules mod);
private:
    friend class Singleton<HttpMgr>;
    HttpMgr();
    QNetworkAccessManager _manager;

private slots:
    /**
     * @brief SlotHttpFinish  Http请求响应槽函数
     * @param id              请求id
     * @param res             请求结果内容
     * @param err             请求状态X信息
     * @param mod             请求模块
     */
    void SlotHttpFinish(ReqId id, QString res, ErrorCodes err, Modules mod);

signals:
    /**
     * @brief Http请求完成
     * @param id        请求id
     * @param res       请求结果内容
     * @param err       错误码
     * @param mod       模式
     */
    void SignalHttpFinish(ReqId id, QString res, ErrorCodes err, Modules mod);
    /**
     * @brief SignalRegModFinish  注册模块完成信息
     * @param id                  请求id
     * @param res                 请求结果内容
     * @param err                 请求状态信息
     */
    void SignalRegModFinish(ReqId id, QString res, ErrorCodes err);
};

#endif // HTTPMGR_H
